package leetcode每日一题;

/**
 * 1. 问题描述
 *      给定一个数组，将数组中的元素向右移动 k 个位置，其中 k 是非负数。
 *
 * 2， 算法分析
 *      1. 取模法  会浪费掉O(n)的时间复杂度
 *          此方法不能直接改变数组中的元素，这样会覆盖掉之后移动的元素，所以只能重新开辟一个新的内存空间
 *          存放移动之后的元素
 *
 *      2. 如果规定空间复杂度为O(1),那么此题应该怎么解决呢？
 *          原地置换法
 *
 * 3. 代码实现
 */
@SuppressWarnings("all")
public class 旋转数组 {
    public static void main(String[] args) {

    }

    /**
     * 求余法
     * @param nums
     * @param k
     */
    public static void rotate(int[] nums, int k) {
        int[] temp = new int[nums.length];
        for(int i = 0; i < nums.length; i++) {
            temp[(i+k)%nums.length] = nums[i];
            //System.out.println(temp[(i+k)%nums.length]);
        }
        for(int i = 0; i < temp.length; i++) {
            nums[i] = temp[i];
        }
    }
}
